#ifndef BINARY_TREE_H
#define BINARY_TREE_H

#include <iostream>
using namespace std;

template <typename tp>
class Node
{
 private:
  tp value;
  Node* k1;
  Node* k2;
 public:
  Node();
  ~Node();
}

template <typename tp>
class BinaryTree : class Node
{
 public:
  BinaryTree();
  ~BinaryTree();
  void insert(tp value);
  bool search(tp value);
  void remove(tp value);
  tp findMin();
  tp findMax();
  void printTree();
 private:
  Node* root;
}

template <typename tp>
class AVLTree : class BinaryTree
{
 public:
  void rotate_left();
  void rotate_right();
  void balance();
}

#endif
